package com.nep.NEPS.controller;

import com.nep.common.util.ApplicationContextUtil;
import com.nep.common.util.AuthUtil;
import com.nep.common.util.SceneSwitcherUtil;
import com.nep.entity.supervisor.Report;
import com.nep.entity.supervisor.User;
import javafx.fxml.FXML;
import javafx.scene.control.*;

import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.time.LocalDateTime;

import static com.nep.common.util.AlertUtil.*;

/**
 * 监督员报告提交控制器
 * 处理环境监测报告的提交逻辑，包括表单验证、报告创建和数据持久化
 */
public class SupervisorReportViewController {
    @FXML private ToggleGroup aqiToggleGroup;      // AQI等级选择组
    @FXML private TextArea descriptionTextArea;    // 报告描述文本区域
    @FXML private Button submitBtn;                // 提交按钮
    @FXML private Button backBtn;                  // 返回按钮
    @FXML private Label gridAddressLabel;          // 网格地址标签

    private User currentUser;                      // 当前登录用户

    /**
     * 初始化方法，在FXML加载完成后调用
     * 完成登录验证、用户信息获取和界面初始化
     */
    public void initialize() {
        // 检查用户登录状态，未登录则跳转登录页面
        AuthUtil.checkLoginStatus(backBtn);

        currentUser = ApplicationContextUtil.getInstance().getCurrentUser();
        if (currentUser == null) {
            showError("系统错误", "未能获取当前用户信息，请重新登录");
            return;
        }

        // 显示用户当前负责的网格地址
        String gridAddress = currentUser.getGridAddress();
        gridAddressLabel.setText("当前网格: " + (gridAddress == null || gridAddress.isEmpty() ? "未选择" : gridAddress));
    }

    /**
     * 处理提交报告按钮点击事件
     * 验证表单数据、创建报告对象并调用服务提交
     */
    @FXML
    private void handleSubmit() {
        // 控件存在性验证（防御性编程）
        if (descriptionTextArea == null) {
            showError("控件错误", "描述文本区域未正确加载");
            return;
        }

        // 获取选中的AQI等级
        RadioButton selectedRadioButton = (RadioButton) aqiToggleGroup.getSelectedToggle();
        if (selectedRadioButton == null) {
            showError("提交失败", "请选择 AQI 等级");
            return;
        }

        String aqiLevel = selectedRadioButton.getText();
        String description = descriptionTextArea.getText().trim();

        // 描述内容非空验证
        if (description.isEmpty()) {
            showError("提交失败", "请填写报告描述");
            return;
        }

        // 创建报告对象并填充数据
        Report report = new Report();
        report.setUserId(currentUser.getPhone());        // 设置用户ID
        report.setAqiLevel(aqiLevel);                   // 设置AQI等级
        report.setDescription(description);             // 设置报告描述
        report.setGridAddr(currentUser.getGridAddress()); // 设置网格地址
        report.setCreateTime(LocalDateTime.now());      // 设置当前时间为创建时间
        report.setUserName(currentUser.getRealName());   // 设置用户姓名

        // 调用用户服务提交报告
        boolean success = ApplicationContextUtil.getInstance().getUserService().submitReport(report);
        if (success) {
            // 报告提交成功后追加到本地文件
            try (PrintWriter writer = new PrintWriter(new FileWriter("reports.txt", true))) {
                writer.println(report.getUserId() + "," + report.getUserName() + "," +
                        report.getAqiLevel() + "," + report.getDescription() + "," +
                        report.getGridAddr() + "," + report.getCreateTime());
            } catch (IOException e) {
                e.printStackTrace();
            }

            showInfo("提交成功", "报告已提交成功");
            handleBack(); // 提交成功后返回主界面
        } else {
            showError("提交失败", "报告提交失败，请重试");
        }
    }

    /**
     * 处理返回按钮点击事件
     * 导航到监督员主界面
     */
    @FXML
    private void handleBack() {
        SceneSwitcherUtil.switchScene(backBtn, "/com/nep/NEPS/view/SupervisorMainView.fxml");
    }
}